#!/usr/bin/env node
import { Command } from "commander"
import inquirer from "inquirer"
import chalk from "chalk"
import ApiGenerator from "./generator"
import TypeScriptApiGenerator from "./typescript-generator"
import fs from "fs"
import path from "path"

// 动态读取 package.json 中的版本号
const packageJson = JSON.parse(
  fs.readFileSync(path.join(__dirname, "../package.json"), "utf-8")
)
const version = packageJson.version

const program = new Command()

program
  .version(version)
  .description("LX Swagger CLI - 从 Swagger/OpenAPI 文档生成 TypeScript API 函数")
  .option("-c, --config <path>", "配置文件路径")
  .action(async (options) => {
    const configPath = options.config || "./api-gen.config.json"
    let config = null
    
    // 直接使用Swagger平台
    const platformChoice = { platform: "swagger" }

    // 检查配置文件是否存在
    if (fs.existsSync(configPath)) {
      console.log(chalk.green(`使用该路径下的配置文件 ${configPath}`))
      config = JSON.parse(fs.readFileSync(configPath, "utf-8"))
    } else {
      // 如果配置文件不存在，交互式生成配置文件
      console.log(chalk.yellow(`没有找到该路径下的配置文件 ${configPath}.`))
      
      // Swagger平台只需要URL
      config = await inquirer.prompt([
        {
          type: "input",
          name: "baseUrl",
          message: "输入Swagger API文档URL:",
          default: "http://10.1.120.118:48080/admin-api/system/v3/api-docs"
        }
      ])

      // 保存Swagger配置到文件
      const userConfig = {
        platform: "swagger",
        baseUrl: config.baseUrl
      }
      fs.writeFileSync(configPath, JSON.stringify(userConfig, null, 2), "utf-8")
      console.log(chalk.green(`文件已被创建 ${configPath}`))
    }

    // 设置Swagger配置
    config.platform = "swagger"
    config.baseUrl = config.baseUrl || "http://10.1.120.118:48080/admin-api/system/v3/api-docs"

    // 内部固定配置
    const outputDir = path.resolve("api-gen")

    // 创建输出目录
    if (!fs.existsSync(outputDir)) {
      fs.mkdirSync(outputDir, { recursive: true })
    }

    try {
      console.log(chalk.blue("开始生成TypeScript API代码..."))

      // 获取Swagger数据
      const generator = new ApiGenerator({
        baseUrl: config.baseUrl,
        token: config.token, // token might not be needed for swagger, but keeping for compatibility
        apiTemplate: config.apiTemplate,
        platform: config.platform,
        ...(config.projectId && { projectId: config.projectId })
      })

      // 获取原始Swagger数据
      const { data } = await generator.fetchApiData()

      // 使用TypeScript生成器
      const tsGenerator = new TypeScriptApiGenerator(data, outputDir)
      await tsGenerator.generateTypeScriptFiles()

      console.log(chalk.green("TypeScript API代码生成成功！"))
      console.log(chalk.green(`输出目录: ${outputDir}/`))
    } catch (error) {
      console.error(chalk.red("生成API代码时出错:"), error)
      process.exit(1)
    }
  })

program.parse(process.argv)